package chapter7;
import static utility.Print.*;

/**
 * Exercise 2: (2) Inherit a new class from class Detergent. Override scrub( )
 * and add a new method called sterilize( ).
 * 
 */

class Cleanser {
	private String s = "Cleanser";

	public void append(String a) {
		s += a;
	}

	public void dilute() {
		append(" dilute()");
	}

	public void apply() {
		append(" apply()");
	}

	public void scrub() {
		append(" scrub()");
	}

	public String toString() {
		return s;
	}

	public static void main(String[] args) {
		Cleanser x = new Cleanser();
		x.dilute();
		x.apply();
		x.scrub();
		print(x.toString());
	}
}

class Detergent extends Cleanser {
	// Change a method:
	public void scrub() {
		append(" Detergent.scrub()");
		super.scrub(); // Call base-class version
	}

	// Add methods to the interface:
	public void foam() {
		append(" foam()");
	}
}

class NewDetergent extends Cleanser {
	// Change a method:
	public void scrub() {
		append(" NewDetergent.scrub()");
		super.scrub(); // Call base-class version
	}

	// Add methods to the interface:
	public void sterilize() {
		append(" NewDetergent.sterilize()");
	}
}


public class Exercise2 {

	public static void main(String[] args) {
		Detergent x = new Detergent();
		x.dilute();
		x.apply();
		x.scrub();
		x.foam();
		print(x.toString());
		
		NewDetergent newDetergent = new NewDetergent();
		newDetergent.dilute();
		newDetergent.apply();
		newDetergent.scrub();
		newDetergent.sterilize();
		print(newDetergent.toString());
		
	}
}

